function Si = Kc(X, T, r, b, v)
    N = 2 * b / v^2;
    m = 2 * r / v^2;
    q2u = (-1 * (N - 1) + ((N - 1)^2 + 4 * m)^0.5) / 2;
    su = X / (1 - 1 / q2u);
    h2 = -1 * (b * T + 2 * v * (T)^0.5) * X / (su - X);
    Si = X + (su - X) * (1 - exp(h2));

    k = 2 * r / (v^2 * (1 - exp(-1 * r * T)));
    d1 = (log(Si / X) + (b + v^2 / 2) * T) / (v * (T)^0.5);
    Q2 = (-1 * (N - 1) + ((N - 1)^2 + 4 * k)^0.5) / 2;
    LHS = Si - X;
    RHS = priceEuropeanOption('Call', Si, X, T, r, b, v) + (1 - exp((b - r) * T) * normcdf(d1)) * Si / Q2;
    bi = exp((b - r) * T) * normcdf(d1) * (1 - 1 / Q2) + (1 - exp((b - r) * T) * normpdf(d1) / (v * (T)^0.5)) / Q2;

    E = 1e-6;
    
    while abs(LHS - RHS) / X > E
        Si = (X + RHS - bi * Si) / (1 - bi);
        d1 = (log(Si / X) + (b + v^2 / 2) * T) / (v * (T)^0.5);
        LHS = Si - X;
        RHS = priceEuropeanOption('Call', Si, X, T, r, b, v) + (1 - exp((b - r) * T) * normcdf(d1)) * Si / Q2;
        bi = exp((b - r) * T) * normcdf(d1) * (1 - 1 / Q2) + (1 - exp((b - r) * T) * normcdf(d1) / (v * (T)^0.5)) / Q2;
    end
end
